package org.domain.sigepac.session;

import java.util.Date;
import java.util.Set;

import org.domain.sigepac.Utils;
import org.domain.sigepac.Entity.Aluno;
import org.domain.sigepac.Entity.Destino;
import org.domain.sigepac.Entity.DestinoId;
import org.domain.sigepac.Entity.MotivoDestino;
import org.domain.sigepac.Entity.Turma;
import org.domain.sigepac.repository.RepositorioAluno;
import org.domain.sigepac.repository.RepositorioDestino;
import org.domain.sigepac.repository.RepositorioMotivoDestino;
import org.domain.sigepac.repository.RepositorioTurma;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.international.StatusMessages;

@Name("destinoHome")
@Scope(ScopeType.CONVERSATION)
public class DestinoHome {


	@In
	private StatusMessages statusMessages;

	@In
	private RepositorioTurma repositorioTurma;

	@In
	private RepositorioDestino repositorioDestino;

	@In
	private RepositorioAluno repositorioAluno;

	@In
	private RepositorioMotivoDestino repositorioMotivoDestino;

	private Aluno aluno;

	private Destino destino;

	@DataModelSelection
	private Destino destinoSelecionada;

	private Date data=new Date();

	@DataModel
	private Set<Destino> destinos;

	@Factory("destinos")
	public void listarEvasoesAluno(){
		if(destinos==null){
			destinos=aluno.getDestinos();
		}
	}

	public DestinoHome() {

	}

	public void adicionarDestino() throws CloneNotSupportedException{
		destino.setAluno(aluno);
		if( ((DestinoId) destino.getId()).getIdAluno()==null){
			DestinoId id=new DestinoId();
			id.setIdAluno((Integer) aluno.getId());
			id.setIdMotivo((Integer) destino.getMotivo().getId());
			id.setIdTurma((Integer) destino.getTurma().getId());

			destino.setId(id);
		}
		destinos.add(destino.Clone());
		destino=null;
		getDestino();
	}

	public void removerDestino(){
		destinos.remove(getDestinoSelecionada());
	}

	public void editarDestino(){
		setDestino(getDestinoSelecionada());
	}

	@End
	public void salvar(){

		for (Destino destino : destinos) {

			repositorioDestino.inserirOuAtualizar(destino);
			Utils.entityManagerFlush();
		}
	}

	public Integer getIdAluno(){
		return (Integer) getAluno().getId();
	}

	public void setIdAluno(Integer idAluno) {
		setAluno(repositorioAluno.obterPorId(idAluno));
	}


	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
	public Aluno getAluno() {
		return aluno;
	}


	public Set<Destino> getDestinos() {
		return destinos;
	}

	public void setDestinoSelecionada(Destino destino) {
		this.destinoSelecionada = destino;
	}
	public Destino getDestinoSelecionada() {
		return destinoSelecionada;
	}



	public Destino getDestino() {
		if(destino==null){
			destino=new Destino();
			destino.setAluno(getAluno());
			destino.setTurma(new Turma());
			destino.setMotivo(new MotivoDestino());
			destino.setData(new Date());
		}
		return destino;
	}



	public void setDestino(Destino destino) {
		this.destino = destino;
	}
}
